草庐IT

Spring Mongo Repository 多态性

全部标签

C++:混入和多态性

我正在尝试使Mixin模式适合我的问题,但我有一个多态性问题,我不知道如何有效解决。在尝试重新设计我的程序之前,我想征求您的意见(也许有一些我不知道的很酷的C++功能)。我想以非常直接和简单的方式展示它,所以这里的用例可能没有意义。我只有一个Window类structWindowCreateInfo{std::stringtitle;intx,y;intwidth,height;};classWindow{public:Window(constWindowCreateInfo&createInfo):title(createInfo.title),x(createInfo.x),y(c

c++ - 显示多态类

我有一个带有命令行界面的现有应用程序,我正在向其添加GUI。经常出现的一种情况是,我有一个继承自一个类的对象列表,需要在列表中显示,但每个子类的显示方式略有不同。不想使用反射/RTTI到处都有巨大的switch语句来进行显示,每个类都知道如何返回自己的摘要字符串,然后将其显示在列表中:intposition=0;for(vector::const_iteratoriDisp=listToDisplay.begin();iDisp!=listToDisplay.end();++iDisp)coutGetSummary();相似的功能可以在不同的上下文中显示不同的信息。在我们需要添加GUI

c++ - 一组根据操作数类型而不同名称的函数可以在C语言中称为理论上的静态多态吗?

是否一组函数只做一个词但名称不同,如atoi、atol、atoll等理论上称为多态?例如,我有一个函数swap需要对不同类型的数据进行操作。所以我有一个函数/操作,我有不同的实现,但不幸的是,因为语言不支持使用相同的函数名称,为了获得这样的功能,我需要制作变体swap_i,swap_l、swap_f、swap_str等等,必须根据操作数手动调用它们。在设计代码时,人们会将其设计为一个函数,具有不同的实现,根据操作数调用。但在这种情况下,程序员而不是编译器需要对函数进行静态绑定(bind)。如果程序员用C++实现它,那么设计将是相同的(因为他/她遵循了OOD方法),但在这种情况下,静态绑

C++11 - 编译时多态性解决方案

假设我正在编写一个跨平台库,我必须以不同平台有不同行为的方式组织代码,并且这种行为(或定义)是在编译时根据平台选择的我的图书馆正在编译。在C++中执行此操作的“通常”方法是在编写方法或类时用大量#ifdef污染代码。方法的问题在于:源代码看起来真的很丑如果您支持3个平台,您的源代码大约比您真正需要的大3倍,这意味着您的编译器仍然需要解析和分析所有代码才能“看到”#ifdef不同的实现之间没有真正的区别,当代码库增长时很难维护,而当你只有3-4个平台时,它增长得非常快。由于C++11中有很多新特性,我想知道是否有什么改变,是否有新的选项。 最佳答案

c++ - QVariant 的多态性

我有两个这样的类:classFoo{public:Foo(inti):_i(i){}int_i;};Q_DECLARE_METATYPE(Foo*)classBar:publicFoo{public:Bar(inti,intj):Foo(i),_j(j){}int_j;};Q_DECLARE_METATYPE(Bar*)我的长凳是这样的:intmain(intargc,char*argv[]){QApplicationa(argc,argv);Bar*bar=newBar(10,11);QVariantvar=QVariant::fromValue(bar);Foo*foo=var.v

c++ - 使用不同的实现文件来实现多态是不是可以?

如果给定接口(interface)有多个所需的实现,但所需的具体实现在编译时就已知,那么简单地将make文件定向到同一header的不同实现文件是否错误?例如,如果有一个定义汽车的程序(Car.h)//Car.hclassCar{public:stringWhatCarAmI();}并且在构建时我们知道我们想要它是法拉利还是菲亚特,给每个相应的文件://Ferrari.cpp#include"Car.h"stringCar::WhatCarAmI(){return"Ferrari";}而对于另一种情况(不出所料)//Fiat.cpp#include"Car.h"stringCar::W

c++ - 为什么 dynamic_cast 可以用于非多态类型的向上转换?

参见here:dynamic_castcanonlybeusedwithpointersandreferencestoclasses(orwithvoid*).Itspurposeistoensurethattheresultofthetypeconversionpointstoavalidcompleteobjectofthedestinationpointertype.Thisnaturallyincludespointerupcast(convertingfrompointer-to-derivedtopointer-to-base),inthesamewayasalloweda

c++ - 传递返回多态 unique_ptr 的 lambda 作为函数指针

我想传递一个非捕获的lambda,它返回一个std::unique_ptr,作为std::unique_ptr(*)()类型的函数指针.但是,这仅在我将lambda的返回类型明确声明为std::unique_ptr时才有效。.为什么要明确说明返回类型?为什么它适用于std::function没有这个额外的返回类型?#include#includestructBase{virtual~Base()=default;};structDerived:Base{};structFailsForF2{usingFunction=std::add_pointer_t()>;FailsForF2(F

c++ - 多态性:成员访问和getter给出不同的结果

代码如下:#include#include#includeclassParent{public:virtualvoidwhatAmI(){std::coutvalue=10;sc.parent->whatAmI();std::coutvaluegetValue()它返回:Achild10valuefromChild0我已经阅读了有关对象切片的内容,并确保在child被切片后我会分配值10。我仍然不明白为什么直接字段访问和函数调用会给出不同的结果。谢谢。 最佳答案 这里没有切片-您正在通过指针访问。该行为是由于成员变量访问是不是多态的

c++ - 多态 unique_ptr 复制省略

我有以下代码适用于Clang5.0,但不适用于启用了C++14的Clang3.8:classBase{};classDerived:publicBase{};std::unique_ptrMakeDerived(){autoderived=std::make_unique();returnderived;}intmain(){autobase=MakeDerived();std::coutLiveSampleHere在这种情况下,由于复制省略,返回值在技术上是移动构建的吗?如果是这样,这是否意味着unique_ptr的移动构造函数旨在支持用户类类型的隐式向上转换?从cppreferen